﻿using System;
using System.Windows.Forms;
using System.IO;
using Microsoft.VisualBasic.Devices;

namespace mytool
{
    public partial class windows_name : UserControl
    {
        public windows_name()
        {
            InitializeComponent();
        }

        private string original;// 要替换的内容
        private string target;// 替换后的内容
        private bool file;// 替换文件名
        private bool folder;// 替换文件夹名
        private bool child;// 所有内容，包含子文件夹。

        // 确定
        private void determine_Click(object sender, EventArgs e)
        {
            // 获取参数
            // 内容替换
            original = textBox_replace_original.Text;// 要替换的内容
            target = textBox_replace_target.Text;// 替换后的内容
            file = checkBox_file.Checked;// 替换文件名
            folder = checkBox_folder.Checked;// 替换文件夹名
            child = checkBox_child.Checked;// 所有内容，包含子文件夹。

            if (original == null || original == "")
            {
                MessageBox.Show("替换内容为空！");
                return;
            }

            if (!file && !folder)
            {
                MessageBox.Show("替换文件名或文件夹名！");
                return;
            }

            String rootPath = Directory.GetCurrentDirectory();//获得当前运行程序的路径
            listFolder(rootPath);
        }

        // 获取指定文件夹下的子文件夹和子子文件夹
        // 逐层修改文件夹名称
        private void listFolder(string path)
        {
            DirectoryInfo root = new DirectoryInfo(path);
            if(!System.IO.Directory.Exists(path))
            {
                return;
            }
            foreach (DirectoryInfo di in root.GetDirectories())
            {
                String name = di.Name;
                String fullName = di.FullName;

                // 处理文件夹名称
                if (folder && System.IO.Directory.Exists(fullName) && name.IndexOf(original) > -1)
                {
                    // 修改文件夹名称
                    name = name.Replace(original, target);
                    if (name != null && name != "")
                    {
                        Computer computer = new Computer();
                        computer.FileSystem.RenameDirectory(@fullName, name);

                        // 新的路径
                        fullName = Directory.GetParent(fullName).FullName + "\\" + name;
                    }
                }

                DirectoryInfo ndi = new DirectoryInfo(fullName);
                // 处理文件
                if(file)
                {
                    foreach (FileInfo file in ndi.GetFiles())
                    {
                        name = file.Name;
                        fullName = file.FullName;
                        if(System.IO.File.Exists(fullName) && name.IndexOf(original) > -1)
                        {
                            // 修改文件夹名称
                            name = name.Replace(original, target);
                            if (name != null && name != "")
                            {
                                Computer computer = new Computer();
                                computer.FileSystem.RenameFile(@fullName, name);
                            }
                        }
                    }
                }
                listFolder(fullName);
            }
        }

    }
}
